"""
单继承
多继承
    多继承时候，如果多个父类存在相同的属性和方法，默认使用第一个父类的
    同名属性和方法
重写父类方法和属性名

调用父类方法
多层继承
super()
私有属性和私有方法

    经典类 class xxx :
    新式类 class xxx(object) :  其实就是继承了别的类
    python中所有的类都默认继承自object
"""

# 父类
print('*'*20+'入门案例'+'*'*20)
class A():
    def __init__(self):
        self.num =1

    def info_print(self):
        print(self.num)

class B(A):
    pass

# 可以看到B类继承了A类的属性和方法
b = B()
b.info_print()
print(b.num)


"""
单继承
"""
print('*'*20+'单继承'+'*'*20)
# 除了继承object之外，只继承一个父类就叫做单继承
class Master(object):
    def __init__(self):
        self.kongfu = ['古法络馍绢豆腐']

    def make_cake(self):
        print(f"运用{self.kongfu}制作早餐")

class Prentice(Master):
    pass

prentice  = Prentice()
print(prentice.kongfu)
prentice.make_cake()

"""
    在java中，类是单继承多实现的 
    在python中，类是多继承的
"""
print('*'*20+'多继承'+'*'*20)
class Master2(object):
    def __init__(self):
        print("Master_init")
        self.kongfu = ['古法制作汤圆']

    def make_cake(self):
        print(f"使用{self.kongfu}制作晚餐")

class School(object):
    def __init__(self):
        print("School_init")
        self.kongfu = ['现代方法制作汤圆']
        self.name = '上海小吃培训学校'

    def make_cake(self):
        print(f"使用{self.kongfu}制作商品")

    def teach_user(self):
        print("学校交给学院如何制作汤圆")

class Person(Master2,School):
    pass

# 多继承的时候，如果多个父类存在相同的属性和方法
# 默认使用第一个父类的同名属性和方法
person = Person()
print(person.kongfu)
# 这里会报错，因为使用的是Master的init方法，但是在初始化的时候没有给name赋值
#print(person.name)
person.teach_user()


